package com.example.ordersystem.dao;


import com.example.ordersystem.domain.Dish;
import com.example.ordersystem.domain.DishInfo;
import org.apache.ibatis.annotations.*;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
@Mapper

public interface DishDAOByMybatis {

    /**
     * 根据分类编号查询商品.
     * @param categoryNum 分类编号
     * @return 某个分类的所有商品
     */
    @Select("select * from dish where categoryNum=#{categoryNum}")
    List<Dish> findByCategoryNum(@Param("categoryNum") String categoryNum);

    /**
     * 从视图中查询所有的菜品信息
     * @return 菜品信息
     */
    @Select("select * from dishinfo")
    List<DishInfo> findAllDishInfo();

    /**
     * 根据菜品编号，在基本表中，查询菜品
     * @param num 菜品编号
     * @return 菜品信息
     */
    @Select("select * from dish where num=#{num}")
    Dish findDishByNum(@Param("num") int num);

    /**
     * 添加一个菜品
     * @param add 待添加的菜品
     * @return 1:添加成功；0:添加失败
     */
    @Insert("insert into dish(categoryNum,name,price,picture,description) values" +
            "(#{categoryNum},#{name},#{price},#{picture},#{description})")
    @Options(useGeneratedKeys = true, keyProperty = "num", keyColumn = "num")
    int addDish(Dish add);

    /**
     * 从表中删除一条记录
     * @param num 菜品编号
     * @return 1:删除成功;0:删除失败
     */
    @Delete("delete from dish where num=#{num}")
    int deleteDish(@Param("num") int num);

    /**
     * 根据关键字查询商品
     * @param keyword 关键字
     * @return 包含关键字的商品信息
     */
    @Select("select * from dishinfo where dName like CONCAT('%',#{keyword},'%') " +
            "or cName like CONCAT('%',#{keyword},'%')" +
            "or description like CONCAT('%',#{keyword},'%')")
    List<DishInfo> selectDishInfoByKeyword(@Param("keyword") String keyword);

}
